package com.gzsxy.config;

//AOP: 拦截器
//@Component
//@EnableWebSecurity //开启WebSecurity模式
//public class SecurityConfig extends WebSecurityConfigurerAdapter {
//
//
//
//    @Autowired
//    private MemberDetailsService memberDetailsService;
//
//    //认证  springboot 2.1.x可以直接使用
//    //密码编码：passwordEncoder
//    //在spring security 5.0+新增了很多的加密方法
//    @Override
//    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//
//        //这些数据正常应该从数据库读
//        //.passwordEncoder密码加密BCryptPasswordEncoder()加密类
//        auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
//               .withUser("kuangshen").password(new BCryptPasswordEncoder().encode("123456")).roles("vip2","vip3")
//               .and()
//               .withUser("root").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1","vip2","vip3")
//               .and()
//               .withUser("guest").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1");
//
//
//
//
////        //给用户添加访问接口权限名，(其实跟roles角色是一个道理)
////        auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
////                .withUser("kuangshen").password(new BCryptPasswordEncoder().encode("123456")).authorities("vip1");
//    }
//
//    //授权
//    //链式编程
//    @Override
//    protected void configure(HttpSecurity http) throws Exception {
//      //首页所有人都可以访问，功能页只有对应有权限的人才能访问
//        //请求授权的规则
//        //配置认证方式  token form表单 设置为httpBasic模式(用弹框的形式)
////        http.authorizeRequests().antMatchers("/**").fullyAuthenticated().and().httpBasic();
//        //拦截 http 安全认证模式 设置为formLogin模式（自带的登录表单）
////        http.authorizeRequests().antMatchers("/**").fullyAuthenticated().and().formLogin();
//
//
//
//        http.authorizeRequests()
//                .antMatchers("/").permitAll()  //permitAll所有人可以访问
//                .antMatchers("/level1/**").hasRole("vip1")  //hasRole要有vip1这个权限
//                .antMatchers("/level2/**").hasRole("vip2")
//                .antMatchers("/level3/**").hasRole("vip3");
//
//
//        //给每个接口添加权限名
////        http.authorizeRequests()
////                .antMatchers("/").permitAll()  //permitAll所有人可以访问
////                .antMatchers("/level1/**").hasAnyAuthority("vip1")  //hasAnyAuthority要有vip1这个权限才能访问这个接口
////                .antMatchers("/level2/**").hasAnyAuthority("vip2")
////                .antMatchers("/level3/**").hasAnyAuthority("vip3");
//
//        //http.formLogin()没有权限默认会到登录页面,需要开启登录的页面（登录页面不是自己的）/login
//        //加上loginPage就会跳到自己定制登录页--from表单提交的地址一样
//        //loginProcessingUrl("/login")表单提交给框架验证的路径
//        //底层默认为username---usernameParameter("user")提交form表单时用户名name属性为user
//        //底层默认为password---passwordParameter("pwd")提交form表单时密码name属性为pwd
//        http.formLogin().loginPage("/Login");  //是访问自己接口进行跳转页面的路径
//
////        //防止网站攻击：get post --新版本已经融合了
////        http.csrf().disable(); //关闭csrf功能
//        http.csrf().disable();
//
//        //注销,开启了注销功能，logoutSuccessUrl注销成功跳到首页
//        http.logout().logoutSuccessUrl("/");
//
//        //http.rememberMe()开启记住我功能  cokie，默认保存两周，rememberMeParameter自定义接收前端的参数
//        http.rememberMe().rememberMeParameter("remember");
//
//    }
//
//
//
//    /**
//     * @description: 原因：升级为Security5.0以上密码支持多中加密方式，恢复以前模式
//     * 如果在用户认证那BCryptPasswordEncoder不通过这个加密，权限通不过，
//     * 如果不加BCryptPasswordEncoder，可以通过添加以下方式也可以实现认证
//     */
////    @Bean
////    public static NoOpPasswordEncoder passwordEncoder(){
////        return (NoOpPasswordEncoder) NoOpPasswordEncoder.getInstance();
////    }
//
//}
